package com.hailou.service;

import java.net.URLEncoder;
import java.util.Date;
import java.util.LinkedHashMap;
import java.util.List;
import java.util.Map;

import javax.servlet.http.HttpServletRequest;

import com.hailou.base.bean.MenuAndCode;
import com.hailou.dao.ContentDao;
import com.hailou.dao.UserDao;
import com.hailou.message.resp.Article;
import com.hailou.message.resp.NewsMessage;
import com.hailou.message.resp.TextMessage;
import com.hailou.util.DateTimeUtile;
import com.hailou.util.MessageUtil;

/**
 * 核心请求处理类
 * 
 * @author hailou
 * @date 2013-12-9
 */
public class CoreService {

	public static WeatherReportService wrs = new WeatherReportService();
	public static DomainService gds = new DomainService();
	public static JokeService js = new JokeService();
	public static ContactsService cs = new ContactsService();
	public static TodayInHistoryService ths = new TodayInHistoryService();
	public static BlogForXshellService bxs = new BlogForXshellService();
	
	
	/******************** 确认请求来自微信服务器*************************/
	public static String processRequest(HttpServletRequest request)
			throws Exception {

		String respMessage = null;
		// 默认返回的文本消息内容
		String respContent = "请求处理异常，请稍候尝试！";
		// xml请求解析
		Map<String, String> requestMap = MessageUtil.parseXml(request);
		// 发送方帐号（open_id）
		String fromUserName = requestMap.get("FromUserName");
		// 公众帐号
		String toUserName = requestMap.get("ToUserName");
		// 消息类型
		String msgType = requestMap.get("MsgType");
		// 内容
		String content = requestMap.get("Content");

		System.out.println("fromUserName=" + fromUserName);
		System.out.println("toUserName=" + toUserName);
		System.out.println("msgType=" + msgType);
		System.out.println("content=" + content);
		System.out.println("createTime=" + DateTimeUtile.getNowTime());
		System.out.println("flag1="
				+ UserDao.selectUserMessage(fromUserName).get("flag1"));

		TextMessage textMessage = new TextMessage();
		textMessage.setToUserName(fromUserName);
		textMessage.setFromUserName(toUserName);
		textMessage.setCreateTime(new Date().getTime());
		textMessage.setMsgType(MessageUtil.REQ_MESSAGE_TYPE_TEXT);
		textMessage.setFuncFlag1(0);
		
		/** 将第一次登录的用户插入到数据库，或者将过期的用户的标识量设为初始值 **/
		insertNewUserOrSetFlagValue(fromUserName);
		/** 将用户的回复信息插入数据库 ****************************/
		ContentDao.insertIntoContent(content,msgType,toUserName,fromUserName);
		// 文本消息
		if (msgType.equals(MessageUtil.REQ_MESSAGE_TYPE_TEXT)) {
			respContent = MenuService.respContentMethod(fromUserName,toUserName,msgType,content);
			//返回最后一个图文列表	
			if ("0".equals(content.trim())) {
				return getPhotoAndArt(fromUserName,toUserName);
			}
		}
		// 图片消息
		else if (msgType.equals(MessageUtil.REQ_MESSAGE_TYPE_IMAGE)) {
			respContent = "您发送的是图片消息！";
		}
		// 地理位置消息
		else if (msgType.equals(MessageUtil.REQ_MESSAGE_TYPE_LOCATION)) {
			respContent = "您发送的是地理位置消息！";
		}
		// 链接消息
		else if (msgType.equals(MessageUtil.REQ_MESSAGE_TYPE_LINK)) {
			respContent = "您发送的是链接消息！";
		}
		// 音频消息
		else if (msgType.equals(MessageUtil.REQ_MESSAGE_TYPE_VOICE)) {
			respContent = "您发送的是音频消息！";
		}
		// 事件推送
		else if (msgType.equals(MessageUtil.REQ_MESSAGE_TYPE_EVENT)) {
			// 事件类型
			String eventType = requestMap.get("Event");
			// 订阅
			if (eventType.equals(MessageUtil.EVENT_TYPE_SUBSCRIBE)) {
				/****** 将第一次登录的用户插入到数据库，或者将过期的用户的标识量设为初始值 *****/
				insertNewUserOrSetFlagValue(fromUserName);
				respContent = MenuAndCode.WELCOME_STRING+MenuAndCode.getMainMenu();
			}
			// 取消订阅
			else if (eventType.equals(MessageUtil.EVENT_TYPE_UNSUBSCRIBE)) {
				// TODO 取消订阅后用户再收不到公众号发送的消息，因此不需要回复消息
			}
			// 自定义菜单点击事件
			else if (eventType.equals(MessageUtil.EVENT_TYPE_CLICK)) {
				// TODO 自定义菜单权没有开放，暂不处理该类消息
			}
		}
		textMessage.setContent(respContent);
		respMessage = MessageUtil.textMessageToXml(textMessage);
		
		return respMessage;
	}

	/**************** 获得图文列表 **************************************/
	public static String getPhotoAndArt(String fromUserName , String toUserName) {
		// 创建图文消息
		List<Article> articleList = AuthorInfoService.getAuthorInfor();
		// 创建图文对象
		NewsMessage newsMessage = new NewsMessage();
		// 设置图文消息个数
		newsMessage.setArticleCount(articleList.size());
		// 设置图文消息包含的图文集合
		newsMessage.setArticles(articleList);
		// 设置返回值信息
		newsMessage.setToUserName(fromUserName);
		newsMessage.setFromUserName(toUserName);
		newsMessage.setCreateTime(new Date().getTime());
		newsMessage.setMsgType(MessageUtil.RESP_MESSAGE_TYPE_NEWS);
		newsMessage.setFuncFlag1(0);
		String respMessage = MessageUtil.newsMessageToXml(newsMessage);

		return respMessage;
	}

	/**************** 将第一次登录的用户插入到数据库，或者将过期的用户的标识量设为初始值 *****/
	public static void insertNewUserOrSetFlagValue(String fromUserName) {
		if (!UserDao.isNewUser(fromUserName)) {
			Map<String, String> map = new LinkedHashMap<String, String>();
			map.put("logtime", DateTimeUtile.getNowTime());
			if (DateTimeUtile.comparDateTime(
					DateTimeUtile.getNowTime(),
					UserDao.selectUserMessage(fromUserName).get(
							"logtime"))) {
				map.put("flag1", "0");
				map.put("flag2", "0");
			}
			UserDao.updateUserMessage(fromUserName, map);
		}
	}
}
